﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dominio;
using Persistencia;
using LogicaNegocios.Exceptions;
using System.Data;

namespace LogicaNegocios.Manager
{
    public class DeporteManager
    {

        #region Singleton Code

        private static DeporteManager _manager;

        private DeporteManager(){}

        public static DeporteManager GetManager()
        {
            if (_manager == null)
            {
                _manager = new DeporteManager();
            }

            return _manager;
        }

        #endregion

        public void CrearDeporte(Deporte deporte)
        {
            try
            {
                DeportePersistencia persistencia = new DeportePersistencia();

                Deporte existente = persistencia.GetDeporte(deporte.Nombre);

                if (existente == null)
                {
                    persistencia.InsertarDeporte(deporte);
                }
                else
                {
                    throw new DeporteException(DeporteException.DEPORTE_EXISTENTE);
                }
            }
            catch (DataException)
            {
                throw new DBException(DBException.ERROR_DB);
            }
        }

        public void ModificarDeporte(Deporte deporte)
        {
            try
            {
                DeportePersistencia persistencia = new DeportePersistencia();

                Deporte existente = persistencia.GetDeporte(deporte.Nombre);

                if (existente == null)
                {
                    persistencia.ModificarDeporte(deporte);
                }
                else
                {
                    throw new DeporteException(DeporteException.DEPORTE_EXISTENTE);
                }
            }
            catch (DataException)
            {
                throw new DBException(DBException.ERROR_DB);
            }
        }

        public void EliminarDeporte(Deporte deporte)
        {
            try
            {
                DeportePersistencia persistencia = new DeportePersistencia();

                if(!persistencia.ExisteEventoDeporte(deporte))
                {
                
                    persistencia.EliminarDeporte(deporte);
                }
                else
                {
                    throw new DeporteException(DeporteException.DEPORTE_ASOCIADO_EVENTO);
                }
            }
            catch (DataException)
            {
                throw new DBException(DBException.ERROR_DB);
            }
        }

        public List<Deporte> GetDeportes()
        {
            List<Deporte> deportes = null;

            try
            {
                DeportePersistencia persistencia = new DeportePersistencia();
                deportes = persistencia.GetAllDeportes();
            }
            catch (DataException)
            {
                throw new DBException(DBException.ERROR_DB);
            }

            return deportes;
        }
    }
}
